package main

import (
	"sync"
)

// 同一 goroutine 对同一个 sync.Mutex 多次调用 Lock()，会立即导致死锁。因为 Mutex 是互斥锁，当前 goroutine 已经持有锁，再次请求会阻塞自己，且没有其他 goroutine 会释放锁。
func main() {
	var mu sync.Mutex

	// 第一次加锁
	mu.Lock()
	println("第一次加锁成功")

	// 同一 goroutine 再次加锁，死锁！
	mu.Lock() // 程序会在这里卡住，永远不会执行到下面
	/*
		第一次加锁成功
		fatal error: all goroutines are asleep - deadlock!
		goroutine 1 [sync.Mutex.Lock]:
	*/

	println("第二次加锁成功") // 这行代码永远不会被执行

	mu.Unlock()
	mu.Unlock()
}
